A typical data processing machine consists of an execution unit for executing instructions and a storage facility for storing the data on which the instructions are executed. One of the most important attributes of a good data processing machine is that the execution unit has fast access to the data which is stored in the storage facility. However, a large storage facility which will provide fast access to data is very expensive. So data processing machines have an intermediate storage facility which is smaller in size than the main storage unit but which provides very fast access for the execution unit. This intermediate storage facility, known as a buffer, holds the blocks of data on which the execution unit is operating and allows the execution unit to access the data it needs very quickly. The content of the buffer is continually updated to try to keep available data which the program currently executing in the execution unit needs. If the execution unit calls for data which is not resident in the buffer, then the buffer must retrieve the data from the mainstore for presentation to the execution unit and move out inactive data from the buffer to make room for the data. In a multiprogramming environment, the data which is moved out of the buffer is not necessarily associated with the program which requires space in the buffer.
Along with the need by the execution unit for fast access to data comes the need to assure that the data resulting from operations by the execution unit and stored in the storage facilities is correct. Consequently, the buffer storage facility and the main storage facility typically have error checking and correcting units for detecting errors that may occur in the data while it is resident in the respective storage facility. Likewise, when the execution unit performs an operation on data and desires to move that data back to the storage facility, the resulting data also is checked for errors that may occur during the transfer of the data or during operations in the execution unit. Errors can occur intermittently due to failures of memory devices, electrical contacts, and other reasons.
The error checking that occurs when data is moved from the execution unit into the buffer storage facility introduces a time consuming step in the transfer of data between the execution unit and the buffer, which degrades access of the execution unit to the buffer.
In a multiprogramming environment, the error checking which occurs on the transfer of data from the execution unit to the buffer normally detects errors before the data moves into the buffer in order to confine the damage to the program with which erroneous data is associated. If the erroneous data became stored in the buffer before the error was detected, there would be a chance that during the execution of an unrelated program, the buffer would move the erroneous data out and that the data would be subsequently accessed by an unrelated program. Thus, the error checking normally occurs before the data moves into the buffer, so that other programs will not be damaged by the erroneous data.
Thus, there is a need for an apparatus for deferring the error checking that occurs as data is moved from the execution unit to the buffer in order to speed up the access time between the execution unit and the buffer, but also to confine the damage caused by errors to the program with which the erroneous data is associated.